using System;
using System.Collections.Generic;
using System.Text;
using VSSDKAssist.Assets.ValueProviders.Base;
using System.IO;
using VSSDKAssist.Enums;
using Microsoft.Practices.Common;

namespace VSSDKAssist.Recipes.Common.ValueProviders
{
	/// <summary>
	/// Value provider for a empty icon
	/// </summary>
	public class EmptyIconValueProvider : ValueProviderBase
	{
		#region Constants
		private const string ImageSize = "ImageSize";
		#endregion

		#region Fields
		private string imageSize = string.Empty;
		#endregion

		/// <summary>
		/// Contains code that will be called when recipe execution begins. This is the first method in the lifecycle.
		/// </summary>
		/// <param name="currentValue">An <see cref="T:System.Object"/> that contains the current value of the argument.</param>
		/// <param name="newValue">When this method returns, contains an <see cref="T:System.Object"/> that contains
		/// the new value of the argument, if the returned value
		/// of the method is <see langword="true"/>. Otherwise, it is ignored.</param>
		/// <returns>
		/// 	<see langword="true"/> if the argument value should be replaced with
		/// the value in <paramref name="newValue"/>; otherwise, <see langword="false"/>.
		/// </returns>
		/// <remarks>By default, always returns <see langword="false"/>, unless overriden by a derived class.</remarks>
		public override bool OnBeginRecipe(object currentValue, out object newValue)
		{
			newValue = null;

			if((currentValue == null) && (this.ExecutionStage != Stage.OnBeforeActions))
			{
				ImageSize size = VSSDKAssist.Enums.ImageSize.Size32x32;

				try
				{
					size = (ImageSize)Enum.Parse(typeof(ImageSize), imageSize);
				}
				catch(ArgumentException)
				{
				}

				switch(size)
				{
					case VSSDKAssist.Enums.ImageSize.Size16x16:
						newValue = Path.Combine(this.PackageBasePath, @"Templates\Items\Empty16.ico");
						break;
					case VSSDKAssist.Enums.ImageSize.Size32x32:
						newValue = Path.Combine(this.PackageBasePath, @"Templates\Items\Empty32.ico");
						break;
					default:
						newValue = Path.Combine(this.PackageBasePath, @"Templates\Items\Empty32.ico");
						break;
				}

				return true;
			}

			return false;
		}

		/// <summary>
		/// Called when [configure].
		/// </summary>
		/// <param name="attributes">The attributes.</param>
		protected override void OnConfigure(System.Collections.Specialized.StringDictionary attributes)
		{
			if(attributes.ContainsKey(ImageSize))
			{
				imageSize = attributes[ImageSize];
			}
		}
	}
}